
#列表习题初始

#创建一个列表`list1`，其包含元素 1, 2, 3, 4, 5
list1=[1,2,3,4,5]
print(list1)

#向`list1` 添加一个元素 6
list1.append(6)
print(list1)

#从`list1` 中删除元素 3
list1.remove(3)
print(list1)

#修改`list1` 中的第二个元素值为 8
list1[1]=8
print(list1)

#找出`list1` 中值为 8 的元素索引
index=list1.index(8)
print(index)

#遍历每个元素值
for i in list1:
    print(i)

#利用循环将新列表[7，8，9]的每个元素添加到list1末尾
list2=[7,8,9]
for i in list2:
    list1.append(i)
print("元素添加后，列表为：",list1)

#将列表[10,11,12]添加到list1末尾
list3=[10,11,12]
list1.append(list3)
print("添加列表后，列表为：",list1)

#使用切片，获取list1第三个元素到第五个元素，包含第五个
print(list1[2:5:1])

#将list1的第三个元素修改为两个新的元素[13,14]
list4=[13,14]
for i in list4:
    list1.insert(2,i)
print(list1)


#列表习题进阶
my_list=[3,"apple", 9, "banana", 7, "cherry", 2, "date", 5, "elderberry"]

#向 my_list 中添加一个元素"fig"
my_list.append("fig")
print("添加一个元素fig后，列表为：",my_list)

#从my_list中删除元素"banana"
my_list.remove("banana")
print(my_list)

# 将元素7修改为字符串"grape"
my_list[4]="grape"

#查找并打印元素"cherry"的索引值
print(my_list.index("cherry"))

#遍历my_list并打印每个元素
for i in my_list:
    print(i)

#在"cherry"后面插入新元素"kiwi"
my_list.insert(6,"kiwi")
print(my_list)

#使用索引查找并打印第三个元素
print(my_list[2])

#使用负数索引找到并打印倒数第二个元素
print(my_list[-2])

#使用切片操作获取第三个至第七个元素并打印结果
print(my_list[2:7:1])

#使用切片操作反转整个列表并打印结果
print(my_list[-1::-1])

#对列表中的字符串进行排序，并保留数字在原位
my_list=[3,"apple", 9, "banana", 7, "cherry", 2, "date", 5, "elderberry"]

# 分离数字和字符串
numbers = []
strings = []
for elem in my_list:
    if isinstance(elem, int):
        numbers.append(elem)
    else:
        strings.append(elem)

# 对字符串排序
strings.sort()

# 重新组合列表
result = []
num_idx = 0
str_idx = 0
for elem in my_list:
    if isinstance(elem, int):
        result.append(numbers[num_idx])
        num_idx += 1
    else:
        result.append(strings[str_idx])
        str_idx += 1
my_list = result
print("字符串排序后的列表:", my_list)
print(my_list)

import inflect
my_list=[3,"apple", 9, "banana", 7, "cherry", 2, "date", 5, "elderberry"]
#将my_list中的数字替换为它们对应的字符串形式（如1->'one'），不改变列表中原有的字符串
p = inflect.engine()
for i in range(len(my_list)):
    if type(my_list[i]) is int:
        my_list[i]=p.number_to_words(my_list[i])
print(my_list)

#列表练习题复杂
#1、创建一个列表包含从1到100的所有偶数
list1=[]
for i in range(1,101):
    if(i%2==0):
        list1.append(i)
print(list1)

#2、将上述列表中所有偶数替换为它们的平方
for i in range(len(list1)):
    list1[i]=list1[i]**2
print(list1)

#3、从上述列表中删除所有大于1000的数字(应该倒序删除）
for i in range(len(list1)-1,-1,-1):
    if list1[i]>1000:
        list1.remove(list1[i])
print(list1)

#4、将列表逆序
list1.reverse()
print(list1)

#5、使用切片操作取出列表中的前10个元素
print(list1[0:10:1])

#6、将一个新列表`[101, 102, 103]`加到现有列表的末尾
list2=[101,102,103]
list1.append(list2)
print(list1)

#7、计算列表中元素的平均值
total_sum=0  #所有数的和
for i in list1:
    total_sum+=i
length=len(list1)
avg=total_sum/length
print("平均值为：{:.2f}".format(avg))

#8、找到列表中的最大值和最小值
max_num=list1[0]
min_num=list1[0]
for i in list1:
    if(i>max_num):
        max_num=i
    if(i<min_num):
        min_num=i
print("最大值为：{}\n最小值为：{}".format(max_num,min_num))

#9、找出列表中第一次出现的11的索引位置
list1=[1,2,3,4,11,6,7,8,9,10,11]
print(list1.index(11))

#10、用循环遍历列表，把每个数字替换为其对应的字符形式（例如：1替换为'1'）。注意使用不同类型的循环来实现。
for i in range(len(list1)):
    if isinstance(list1[i], int):
        list1[i]=str(list1[i])
print(list1)

#11、将列表中的所有元素转换成浮点数形式
for i in range(len(list1)):
    list1[i]=float(list1[i])
print(list1)

#12、找出列表中所有大于50的元素个数。
list1=[12,23,34,45,56,78,89]
elem_num=0
for i in list1:
    if i>50:
        elem_num+=1
print("列表中所有大于50的元素有{}个".format(elem_num))

#13、 在列表的第3个位置插入数字99
list1.insert(2,99)
print("在列表的第3个位置插入数字99后，列表为：",list1)

#14、删除列表中的最后一个元素
list1.pop()
print("删除列表中的最后一个元素后，列表为：{}".format(list1))

#15、使用列表推导式创建一个新列表，包含原列表中每个数字乘以2的结果
doubled_list = [num * 2 for num in list1]
print("包含原列表中每个数字乘以2的结果的新列表为：",doubled_list)

#16、将列表分成两部分，一部分是小于等于50的数，另一部分是大于50的数
small_list=[]
big_list=[]
for i in list1:
    if i<=50:
        small_list.append(i)
    else:
        big_list.append(i)
list1=[]
list1.append(small_list)
list1.append(big_list)
print("将列表分成两部分，一部分是小于等于50的数，另一部分是大于50的数",list1)

#17、将列表转换为一个字典，其中列表元素作为键，其在列表中的索引作为值
list1=[12,23,34,45,56,78,89]
my_dict = {value: index for index, value in enumerate(list1)}
print(my_dict)

#18、使用`enumerate`函数遍历列表，并打印元素及其索引
for index,element in enumerate(list1):
    print("元素：{}，索引：{}".format(element,index))

#19、从列表中随机取出一个元素。
import random
yuansu=random.choice(list1)
print("从列表中随机取出一个元素",yuansu)

#20、将列表保存到一个txt文件里，每个元素占一行。
with open('output.txt', 'w', encoding='utf-8') as f:
    # 遍历列表，将每个元素写入文件，并换行
    for element in list1:
        f.write(str(element)+'\n')
